// npm -g install moment@2.29.4 fs-extra@11.1.1
const moment = require('moment'); // require
const fs = require('fs-extra')
const path = require('path');
let format = 'YYYY-MM-DD-HH-mm-ss'

// 配置位置
// 备份最新修改过文件的脚本
// 基础路径，当前文件夹下面的 /ytz
let copyBase = __dirname + ''
// 备份的采用时间点 比如备份2023-07-17-10-24-00 这个时间点后修改过的文件
let time = moment('2023-07-19-09-00-00', format)
//处理路径
let copyTo = copyBase + '/ROOT-update/' + time.format(format)

// 采用endsWith匹配
let ignoreFolderName = [
  '.svn',
  '.idea',
  'ROOT1',
  'ROOT-update',
]

// 采用endsWith匹配
let ignoreFileName = [
  'updateBak.js',
  'common.js',
]

// 获取所有文件
function getFilesInFolder(folderPath, callback) {
  fs.readdir(folderPath, (err, files) => {
    if (err) {
      callback(err);
      return;
    }

    const filePromises = files.map((file) => {
      const filePath = path.join(folderPath, file);
      return new Promise((resolve, reject) => {
        fs.stat(filePath, (err, stats) => {
          if (err) {
            reject(err);
            return;
          }

          if (stats.isDirectory()) {
            for (let string of ignoreFolderName) {
              if (filePath.endsWith(string)) {
                resolve([]);
                return
              }
            }
            getFilesInFolder(filePath, (err, subFiles) => {
              if (err) {
                reject(err);
                return;
              }
              resolve(subFiles);
            });
          } else {
            for (let string of ignoreFileName) {
              if (filePath.endsWith(string)) {
                resolve([]);
                return
              }
            }
            const fileData = {
              path: filePath,
              modifiedTime: stats.mtime, // 修改时间
              accessedTime: stats.atime // 访问时间
            };
            resolve(fileData);
          }
        });
      });
    });

    Promise.all(filePromises)
      .then((fileList) => {
        const files = fileList.flat(); // 多维数组转为一维
        callback(null, files);
      })
      .catch(callback);
  });
}

getFilesInFolder(copyBase, (err, files) => {
  if (err) {
    console.error(err);
    return;
  }

  files.forEach(file => {
    // 文件的修改时间
    const modifiedTime = moment(file.modifiedTime);
    if (modifiedTime.isAfter(time)) { // 如果修改时间在时间点后面就备份文件
      const relativePath = path.relative(copyBase, file.path); // 构建相对路径，相对于根文件夹
      const destPath = path.join(copyTo, relativePath); // 构建目标文件路径，保持文件路径不变
      fs.ensureDirSync(path.dirname(destPath)); // 确保目标文件夹存在
      fs.copyFileSync(file.path, destPath);
      console.log('文件路径:', file.path);
      console.log('修改时间:', moment(file.modifiedTime).format(format));
      console.log('访问时间:', moment(file.accessedTime).format(format));
      console.log('--------------------------');
    }
  });
});

































